Solution:
The 4-fold rotation axis maps the $\mathbf{a}$ and $\mathbf{b}$ lattice vectors to $\mathbf{a}'$ and $\mathbf{b}'$, where $\mathbf{a}'$ = $\mathbf{b}$ and $\mathbf{b}'$ = -$\mathbf{a}$. Hence, the matrix is
In [1]:
D_4 = [[0, -1, 0],
[1, 0, 0],
[0, 0, 1]]
The mirror plane maps $\mathbf{b}$ lattice vector to $\mathbf{b}'$, where $\mathbf{b}'$ = -$\mathbf{b}$. Hence, the matrix is
In [2]:
D_m = [[1, 0, 0],
[0, -1, 0],
[0, 0, 1]]
Solution: All symmetry elements can be obtained by the multiplication of the generators.
In [3]:
import numpy as np
D = {}
D["4"] = np.array(D_4)
D["m"] = np.array(D_m)
D["4_2"] = np.dot(D["4"], D["4"])
D["4_3"] = np.dot(D["4"], D["4_2"])
D["E"] = np.dot(D["4"], D["4_3"])
D["m_4"] = np.dot(D["m"], D["4"])
D["m_4_2"] = np.dot(D["m"], D["4_2"])
D["m_4_3"] = np.dot(D["m"], D["4_3"])
print "The complete set of symmetry elements are given by the following matrices:"
for k, v in D.items():
print "%s = %s" % (k, str(v))
The multiplication table is given below:
In [4]:
import itertools
keys = ["E", "4", "4_2", "4_3", "m", "m_4", "m_4_2", "m_4_3"]
def find_key(m):
for k, v in D.items():
if np.all(v == m):
return k
from prettytable import PrettyTable
t = PrettyTable([""] + keys)
headers = list(keys)
for k1 in keys:
row = [k1]
for k2 in keys:
prod = np.dot(D[k1], D[k2])
row.append(find_key(prod))
t.add_row(row)
print t
Solution:
4, m, m_4, m_4_2 and m_4_3 are subgroups of 4mm.
Solutinon:
Refer to Structure of Materials Chapter 9, Fig 9.7.
Solution:
The orbit of the generalposition is given by:
In [5]:
from sympy import symbols
x, y, z = symbols("x y z")
p = [x, y, z]
for k, v in D.items():
print np.dot(v, p)
Solution:
There are special positions on the 4-fold axis (0, 0, z), the mirror plane (0, y, 0) and the diagonal mirror plane (x, x, z).
The orbit for the special position (0, 0, z) on the 4-fold axis is given by:
In [6]:
p = [0, 0, z]
orbit = []
for k, v in D.items():
orbit.append(str(np.dot(v, p)))
for o in set(orbit):
print o
The orbit for the special position (0, y, 0) on the mirror plane on the a-c plane is given by:
In [7]:
p = [0, y, 0]
orbit = []
for k, v in D.items():
orbit.append(str(np.dot(v, p)))
for o in set(orbit):
print o
The orbit for the special position (x, x, z) on the diagonal mirror plane is given by:
In [8]:
p = [x, x, z]
orbit = []
for k, v in D.items():
orbit.append(str(np.dot(v, p)))
for o in set(orbit):
print o
Note that all special positions have orbits that have < 8 elements.